在架服務的過程中,我們不可避免的一定會遇到一些問題。很多問題可能只需要看看 log 就可以解決,但也有些問題看了 log 之後還是毫無頭緒。
在這種情況下,有一些工具也許派得上用場,這篇文章會介紹一些自己常用的網路相關小工具,在 debug 的時候會更方便。
ping
、nc
、tracert
自己平常的第一步都是先使用 ping
(或是 nc
跟 tracert
,用來看網路本身是不是好的),沒成功再去看 log,最後再去用其他工具看。
有很多時候問題根本就不是服務死掉了,而是中間的路根本就不通,所以封包到不了。
這幾個工具很簡單,通常也不太會找到什麼問題,畢竟網路就是 infra 在那邊,你沒有去動他他也算是穩定。但如果真的遇到這種狀況,等你看 log 看半天,結果最後發現根本是封包到不了,那真的很嘔。
lsof
這個指令本身的功能是看檔案被哪個 process 占用。但我們知道,在 Linux 的世界裡萬物都是檔案,所以我們也可以用它來看網路的使用情況。
我最常使用的 case 是拿來看 port 被誰佔用了,例如說今天我想要用 nginx listen 8080 port,但發現他已經被佔用了。這時候你可以使用 lsof
來看是誰佔用了 8080 port:
$ sudo lsof -i :8080
當然他還有一些其他的用法,但我自己不常用,例如:
sudo lsof -i
sudo lsof -i tcp -s TCP:LISTEN
sudo lsof -i tcp -s TCP:ESTABLISHED
tcpdump
我覺得這是最好用的工具之一,他可以直接攔截封包,讓你看到每個封包的內容,可以直接理解成 CLI 版的 wireshark。
但也因為他可以看到每個封包的內容,使用上應該要注意隱私的問題,而且一個一個封包看其實有點累,不到最後我基本上不會用。
建議使用的時候要想清楚自己要攔截什麼,然後把運算式下清楚一點,不然會截到一堆莫名其妙的東西,妨礙自己判斷。
以下是幾個我自己常用的寫法以及參數:
tcpdump -i [interface]
sudo tcpdump -i [interface] icmp
tcpdump tcp port 80
tcpdump tcp port 22 and src net 10.1.1.0/24
10.1.1.0/24
網段來的 ssh 流量上述幾個指令可以讓管理者看到流量到底有沒有進出,但如果現在問題是出在封包內容的話,可以考慮多加一些參數:
-v
/ -vvv
-X
-A
-w
使用這些小工具可以節省大量的時間,幫助我們更快速地找到並解決問題,確保服務的穩定運作。希望本文介紹的工具能對你的網路 debug 有所幫助。